This invention relates to host computers and memory management. More particularly, this invention relates to a storage system""s managing blocks of storage that a host requests.
In prior art systems, a host computer may request an amount of storage space from a storage element or storage system. The element or system allocates the entirety of the space requested, and the host computer manages the space it requested. Requesting space for a file system and then building a file system in that space is an example.
Not uncommonly, the host administration (software or a human administrator) miscalculates the amount of space necessary. Where the miscalculation is an overestimation, nothing need be done, even though resources may be inefficiently allocated. Where, however, the miscalculation is an underestimation, the host needs to increase the size of space available to it.
To meet the increased demand for storage, the host decides to increase the size of the file system. To expand the file system, the host first quiesces the file system and then backs up the data. The host takes the file system offline, increases the size of the volume/partition, constructs a new file system spanning the increased volume/partition size and brings online the new file system. The creation of the new file system destroys the old file system and the data resident therein. The host, therefore, restores the destroyed data from the back up. The expanded file system and the old data are now ready to meet the demand of applications for increased storage.
Taking the file system offline causes any access in progress to fail. Even were an access to block indefinitely while the file system is expanding and unavailable (a configuration not admitted to be in the art), the delay would be expected to be on the order of tens of minutesxe2x80x94an eternity in computer time. Where a human administrator must notice the host""s request for a larger volume/partition/file system, the time may increase to hours.
Accordingly, there is a need for data storage that efficiently manages storage resources, dynamically expanding and contracting according to storage usage. Even more, there is a need for efficient managed storage that dynamically expands and contracts within an insignificant amount of time computer-wise.
These and other goals of the invention will be readily apparent to one of skill in the art on reading the background above and the description below.
Herein are taught apparatus and methods for managing storage. A storage system may receive a request from a host, for example, to allocate n blocks of storage. The storage system may allocate m blocks of physical storage, where m less than n, and indicate that the request completed successfully. In various embodiments, m greater than zero (0) or m=zero (0).
The storage system may receive a request to access a block j of the requested blocks of storage, m less than j less than n, and access the block j, in response to the request to access.
Allocating the physical storage may include allocating m blocks of physical storage encompassing the block j. After the allocation, the storage system may receive a request to access a block j of the requested blocks of storage, m less than j less than n. The system may access the block j and indicate that the request to access completed successfully.
Alternatively, before allocating, the storage system may receive a request to access a block j of the requested blocks of storage, m less than j less than n. The storage system may then allocate k blocks of physical storage encompassing the block j and access the block j and indicate that the request to access completed successfully.
The requested blocks may be virtual. M may be predetermined, dynamically determined or empirically determined.
In various embodiments, the invention may be a computer-readable memory containing a computer program for causing a storage processor to assist managing storage, a storage processor including the memory or a computer system including a host for requesting allocation of storage blocks and for requesting access to the requested blocks of storage, the storage processor and a storage element.